package com.lanxiao.cloud.modules.oauth.application;

import com.lanxiao.cloud.common.core.enums.MethodEnum;
import com.lanxiao.cloud.modules.oauth.application.assembler.PermissionAssembler;
import com.lanxiao.cloud.modules.oauth.application.dto.PermissionCmdAdd;
import com.lanxiao.cloud.modules.oauth.application.dto.PermissionCmdUpdate;
import com.lanxiao.cloud.modules.oauth.domain.service.IPermissionService;
import org.springframework.stereotype.Component;

/**
 * @author ：qiaoliang
 * @date ：2021-09-15
 */
@Component
public class PermissionCmdManager {

  private final IPermissionService permissionService;
  private final PermissionAssembler permissionAssembler;

  public PermissionCmdManager(
      IPermissionService permissionService,
      PermissionAssembler permissionAssembler) {
    this.permissionService = permissionService;
    this.permissionAssembler = permissionAssembler;
  }

  /**
   *  新增权限
   *
   * @author ：qiaoliang
   * @param cmdAdd : 权限信息
   * @date 2021-09-15 16:20
   */
  public void savePermission(PermissionCmdAdd cmdAdd) {
    permissionService.savePermission(permissionAssembler.toPermission(cmdAdd));
  }

  /**
   *  修改权限
   *
   * @author ：qiaoliang
   * @param cmdUpdate : 权限信息
   * @date 2021-09-15 16:20
   */
  public void updatePermission(Long id, PermissionCmdUpdate cmdUpdate) {
    permissionService.updatePermission(permissionAssembler.toPermission(id, cmdUpdate));
  }

  /**
   *  删除权限
   *
   * @author ：qiaoliang
   * @param id : 主键
   * @date 2021-09-16 09:31
   */
  public void deletePermission(Long id) {
    permissionService.deletePermission(id);
  }

  /**
   *  反向修改权限状态
   *
   * @author ：qiaoliang
   * @param id : 主键
   * @date 2021-09-16 09:59
   */
  public void updateState(Long id) {
    permissionService.updateState(id);
  }

  /**
   * 校验用户是否有权访问
   *
   * @author ：qiaoliang
   * @param userId : 用户ID
   * @param url : 请求url
   * @param method : 请求方式
   * @date 2021-09-10 11:17
   */
  public void checkUserPermission(Long userId, String url, String method) {
    permissionService.checkUserPermission(userId, url, MethodEnum.valueOf(method));
  }

  /**
   *  校验权限标识是否重复
   *
   * @author ：qiaoliang
   * @param id :  主键
   * @param mark :  标识
   * @date 2021-09-16 09:34
   */
  public void checkMark(Long id, String mark) {
    permissionService.checkRepeatPermission(id, mark, null, null, null);
  }

  /**
   *  校验请求地址是否重复
   *
   * @author ：qiaoliang
   * @param id :  主键
   * @param url : 请求url
   * @param method :  请求类型
   * @date 2021-09-16 09:35
   */
  public void checkUrl(Long id, String url, MethodEnum method) {
    permissionService.checkRepeatPermission(id, null, url, method, null);
  }

  /**
   *  校验路由地址是否重复
   *
   * @author ：qiaoliang
   * @param id :  主键
   * @param path :  路由地址
   * @date 2021-09-16 09:36
   */
  public void checkPath(Long id, String path) {
    permissionService.checkRepeatPermission(id, null, null, null, path);
  }

}
